package com._54programer.ws;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import com._54programer.rabbit.Send;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

import io.netty.channel.Channel;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.http.websocketx.TextWebSocketFrame;

@Component
public class Result {

	@Autowired
	private Send send;

	@Value("${ws.opencluster}")
	private boolean cluster;

	@Autowired
	private SID SSID;

	// 返回消息 个人
	public void OK(ChannelHandlerContext ctx, String message) {
		ctx.writeAndFlush(new TextWebSocketFrame(message));
	}

	// 返回消息 个人2
	public void OK(Channel channel, String message) {
		channel.writeAndFlush(new TextWebSocketFrame(message));
	}

//	//群发给某些用户-- by user
//	public void OKbyGroup_Channel(Set<Channel> channel, String message) {
//		Message messObj = JSON.toJavaObject(JSONObject.parseObject(message), Message.class);
//		messObj.setMessageType(Const.GROUP_MESSAGE);
//		
//		Set<Channel> channel_1 = new HashSet<>();
//		Set<Channel> channel_2 = new HashSet<>();
//		for (Channel channel2 : channel) {
//			for (String uid : WsServerHandler.users.keySet()) {
//				if(Objects.equals(WsServerHandler.users.get(uid), channel2)) {
//					channel_2.add(channel2);//本地
//				}else {
//					channel_1.add(channel2);//集群下
//				}
//			}
//		}
//		
//		messObj.setMessageTypeParams(channel_1);
//		if (isCluster) {
//			// 消息发到集群
//			if(channel_1.size() > 0)
//				amqpTemplate.convertAndSend(JSON.toJSONString(messObj));
//		}
//		// 消息发到本服
//		for (Channel channel2 : channel_2) {
//			channel2.writeAndFlush(new TextWebSocketFrame(message));
//		}
//	}

	// 群发个某groupID -- by groupId
	public void OKby_GroupId(String groupId, String message) {
		if (cluster) {
			Message messObj = JSON.toJavaObject(JSONObject.parseObject(message), Message.class);
			messObj.setData(JSONObject.parseObject(message));
			messObj.setMessageType(Const.BY_GROUPID);
			messObj.setGroupId(groupId);
			messObj.setServerId(SSID.ID());
			// 消息发到集群
			send.sycn(JSON.toJSONString(messObj));
		}
		// 消息发到本服
		NettyComm.sendByGroup(groupId, message);
	}

	// 发给用户标识 uid / username / 等可作为唯一标识
//	public void OKbyGroup_User(Set<String> users, String message) {
//		Message messObj = JSON.toJavaObject(JSONObject.parseObject(message), Message.class);
//		messObj.setMessageType(Const.GROUP_ID_MESSAGE);
//		messObj.setGroupId(groupId);
//		if (isCluster) {
//			// 消息发到集群
//			amqpTemplate.convertAndSend(JSON.toJSONString(messObj));
//		}
//		// 消息发到本服
//		NettyComm.sendByGroup(groupId, message);
//		
//	}

	// 广播
	public void OKby_All(String message) throws Exception {
		if (cluster) {
			Message messObj = JSON.toJavaObject(JSONObject.parseObject(message), Message.class);
			messObj.setData(JSONObject.parseObject(message));
			messObj.setMessageType(Const.BY_NONE);// 广播
			messObj.setServerId(SSID.ID());// 本服ID标识
			// 消息发到集群
			send.sycn(JSON.toJSONString(messObj));
		}
		// 消息发到本服
		NettyComm.sendAll(message);
	}
}
